<#include "/@inc/funcMacros.ftl">
<#include "/@inc/copyright.txt">
<#assign baseName = TriaGram + Prefix >
<#assign className = TriaGram + Prefix + xml>
<@pp.renameOutputFile name=className+".h">
</@pp.renameOutputFile>
//===================================================================
//
// ${className}.h
//
//===================================================================
#ifndef ${className}_H
#define ${className}_H

#include "CATUnicodeString"

<#list Attributes as attr>
<#if attr.list != "y" >
  <#switch attr.type>
	<#case "int">
	<#case "double">
	<#case "long">
	<#case "CATUnicodeString">
	<#break>
	<#default>
#include "${baseName}${attr.type}.h"
	</#switch>
<#else>

class ${baseName}${attr.type}List  ;
</#if>
</#list>

/**
 * Class extending the element.
 */
class ${className} 
{
    public:
	
    //----------------------------------------------------------------
    ${className} ();
    virtual ~${className} ();
	
<#list Attributes as attr>
  <#if attr.list == "y" >
  <#switch attr.type>
	<#case "int">
	<#case "double">
	<#case "long">
	<#case "CATUnicodeString">
	void  Get${attr.name}s( CATListOf${attr.type?cap_first } & oList${attr.name} ) const ;
	void  Append${attr.name}( const ${attr.type?cap_first} & i${attr.prefix}${attr.name} )  ;
	<#break>
	<#default>
  
	void  Get${attr.name}s( ${baseName}${attr.type}List *& opList${attr.name} ) const ;
	void  Set${attr.name}s( const ${baseName}${attr.type}List * ipList${attr.name} )  ;
	</#switch>
	
  <#else>

	void  Get${attr.name}( ${attr.type} & o${attr.name} ) const ;
	void  Set${attr.name}( const ${attr.type} & i${attr.name} )  ;
  </#if>
	
</#list>
  
  private:
  
  <#list Attributes as attr>
  <#if attr.list == "y" >
   <#switch attr.type>
	<#case "int">
	<#case "double">
	<#case "long">
	<#case "CATUnicodeString">
	CATListOf${attr.type?cap_first}   _list${attr.name?cap_first} ;
	<#break>
	<#default>
	${baseName}${attr.type}List *	_pList${attr.name}	;
	</#switch>
  <#else>
	${attr.type}  _${attr.prefix}${attr.name?cap_first} ;
  </#if>
  </#list>
 
   // In order to avoid public implementation by compilers
  ${className} (${className} &);
  ${className}& operator=(${className}&);
	
};

class ${className}List 
{
    public:
	
    //----------------------------------------------------------------
    ${className}List ();
    virtual ~${className}List ();

	void Append(${className} *ip${xml}) ;
	
	${className} * operator(int index) [];
	int Size();
     
  private:
  
// In order to avoid public implementation by compilers
  ${className}List (${className}List &);
  ${className}List & operator=(${className}List&);
	
};

	
#endif